var express = require('express');
var router = express.Router();

const md5 = require('blueimp-md5')
const {UserModel,ChatModel} = require('../db/model')
const filter ={password:0}//指定过滤的属性
/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

//注册一个路由：用户注册
/*
* 提供一个用户注册的接口
* a) path 为: /register
* b) 请求方式为: POST
* c) 接收 username 和 password 参数
* d) admin 是已注册用户
* e) 注册成功返回: {code: 0, data: {_id: 'abc', username: ‘xxx’, password:’123’}
* f) 注册失败返回: {code: 1, msg: '此用户已存在'}*/
/*
* 1.获取请求参数
* 2.处理
* 3.返回响应数据*/
/*router.post('/register',function (req,res) {
  //测试
  console.log("hahha")
  //1.获取请求参数
  const {username,password} =req.body
  //2.处理
  if (username==='admin'){
    //注册失败
    res.send({code: 1, msg: '此用户已存在'})
  }else{
    res.send({code: 0, data: {_id: 'abc', username:username, password:password}})
  }
})*/
//注册路由
router.post('/register',function (req,res) {
    //读取请求参数
  const {username,password,type} = req.body
    //处理
  //判断用户是否已经存在，如果存在返回错误提示
  //查询（根据username)
  UserModel.findOne({username:username},function (err,user) {
      //如果user有值
      if (user){
        //返回已经存在
        res.send({code:1,msg:'此用户已经存在'})
      }else{
        //保存
        new UserModel({username,password:md5(password),type}).save(function (err,user) {
          //生成一个cookie
          res.cookie('userid',user._id,{maxAge:1000*60*60})
          const data = {username,type,_id:user._id}//响应数据不携带密码
          res.send({code:0,data:data})  
        })
      }
  })
    //返回响应数据
})
//登录路由
router.post('/login',function (req,res) {
  const {username,password} = req.body
  //根据username,passsword查询，
  UserModel.findOne({username,password:md5(password)},filter,function (error,user) {
    if (user)
    {
      //生成一个cookie
      const mycookie = res.cookie('userid',user._id,{maxAge:1000*60*60})


      console.log(mycookie)
      console.log(user.id)
      //登录成功
      res.send({code:0,data:user})

    }else{
      res.send({code:1,msg:'用户名或密码错误'})
    }
  })
  //没有，返回提示错误
  //有，返回登录信息

})

//更新用户信息的路由
router.post('/update',function (req,res) {
  //console.log(req.cookies)
  //res.send("hhah")
  const userid = req.cookies.userid
  console.log(userid)
  if (!userid){
    //如果没有路由数据就需要进行登录
    return res.send({code:1,msg:"请先登录"})
  }
  //更新数据库中对应数据的信息
  UserModel.findByIdAndUpdate({_id:userid},req.body,function (err,user) {
  //user是返回数据库中原来的数据
    const {_id,username,type} = user
    //服务器端不支持三点运算符
    const data = Object.assign(req.body,{_id,username,type})
    res.send({code:0,data:data})
  })
})
router.get('/user',function (req,res) {
  //从请求中得到cookie
  const userid = req.cookies.userid
  //如果没有就返回错误信息
  if (!userid){
    return res.send({code:1,msg:"请先登录"})
  }
  UserModel.findOne({_id:userid},filter,function (error,user) {
    res.send({code:0,data:user})
  })
})
//获取用户列表
router.get('/userlist',function (req,res) {
  const {type} = req.query
  console.log('req-----------',req)
  console.log("####################")
//  console.log("查询请求",req)
  UserModel.find({type:type},filter,function (error,users) {
      res.send({code:0,data:users})
  })

})
//删库
//UserModel.remove()

/*
获取当前用户所有相关聊天信息列表
 */
router.get('/msglist', function (req, res) {
  // 获取cookie中的userid
  const userid = req.cookies.userid
  // 查询得到所有user文档数组
  UserModel.find(function (err, userDocs) {
    // 用对象存储所有user信息: key为user的_id, val为name和header组成的user对象
    /*const users = {} // 对象容器
    userDocs.forEach(doc => {
      users[doc._id] = {username: doc.username, header: doc.header}
    })*/
//这里是返回所有的user,就是对需要返回的属性做一个过滤操作
    const users = userDocs.reduce((users, user) => {
      users[user._id] = {username: user.username, header: user.header}
      return users
    } , {})
    /*
    查询userid相关的所有聊天信息
     参数1: 查询条件
     参数2: 过滤条件
     参数3: 回调函数
    */
    //这里是返回所有的符合from是userid或者to是userid的聊天记录，因为这写都是与当前用户有关的聊天记录
    ChatModel.find({'$or': [{from: userid}, {to: userid}]}, filter, function (err, chatMsgs) {
      // 返回包含所有用户和当前用户相关的所有聊天消息的数据
      res.send({code: 0, data: {users, chatMsgs}})
    })
  })
})

/*
修改指定消息为已读
 */
router.post('/readmsg', function (req, res) {
  // 得到请求中的from和to
  const from = req.body.from
  const to = req.cookies.userid
  /*
  更新数据库中的chat数据
  参数1: 查询条件
  参数2: 更新为指定的数据对象
  参数3: 是否1次更新多条, 默认只更新一条
  参数4: 更新完成的回调函数
   */
  ChatModel.update({from, to, read: false}, {read: true}, {multi: true}, function (err, doc) {
    console.log('/readmsg', doc)
    res.send({code: 0, data: doc.nModified}) // 更新的数量
  })
})

module.exports = router;
